package cfsmon.logic.nfm;

import java.util.Map;
import java.util.Set;

import cfsmon.common.Event;
import cfsmon.common.Parameter;

public interface INfm {

	/**
	 * Returns the maximum number of monitors (default is 1)
	 */
	public int getMaximumNumberOfMonitors();
	
	public void setMaximumNumberOfMonitors(int max);
	
	/**
	 * Returns a map of state names to states of the NFM
	 */
	public Map<String, NfmState> getStates();
	
	public void addState(NfmState state);
	
	/**
	 * Returns the set of final states
	 */
	public Set<NfmState> getFinalStates();
	
	public void addFinalState(NfmState state);
	
	/**
	 * Returns the set of initial states
	 */
	public Set<NfmState> getInitialStates();
	
	public void addInitialState(NfmState state);
	
	/**
	 * Returns a map of event names to events of the NFM
	 */
	public Map<String, Event> getEvents();
	
	public void addEvent(Event event);
	
	/**
	 * Returns a map of parameter names to parameters of the NFM. This
	 * set is considered to form the NFM state.
	 */
	public Map<String, Parameter> getParameters();
	
	public void addParameter(Parameter parameter);
	
	public void print();
}
